<?php

/**
 * @author duyluong
 * @copyright 2012
 */

class StringHelper {
	var $vnarray = array(  
            'a'=>'á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ',  
            'd'=>'đ',  
            'e'=>'é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',  
            'i'=>'í|ì|ỉ|ĩ|ị',  
            'o'=>'ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',  
            'u'=>'ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',  
            'y'=>'ý|ỳ|ỷ|ỹ|ỵ',  
            'A'=>'Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ',  
            'D'=>'Đ',  
            'E'=>'É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ',  
            'I'=>'Í|Ì|Ỉ|Ĩ|Ị',  
            'O'=>'Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ',  
            'U'=>'Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự',  
            'Y'=>'Ý|Ỳ|Ỷ|Ỹ|Ỵ',  
        ); 
	var $lower = '
			a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
			|á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ
			|đ
			|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ
			|í|ì|ỉ|ĩ|ị
			|ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ
			|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự
			|ý|ỳ|ỷ|ỹ|ỵ';
	var $upper = '
			A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
			|Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ
			|Đ
			|É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ
			|Í|Ì|Ỉ|Ĩ|Ị
			|Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ
			|Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự
			|Ý|Ỳ|Ỷ|Ỹ|Ỵ';
   /**
	*	chuyển đổi sang chữ thường 
	*	parameters: 
	*		@string: chuỗi ký tự
	*	results: chuỗi ký tự viết thường
   */
	function ToLower($string){
		$arrayUpper = explode('|',preg_replace("/\n|\t|\r/","",$this->upper));
		$arrayLower = explode('|',preg_replace("/\n|\t|\r/","",$this->lower));
		return str_replace($arrayUpper,$arrayLower,$string);
	}
   /**
	*	chuyển đổi sang chữ hoa 
	*	parameters: 
	*		@string: chuỗi ký tự
	*	results: chuỗi ký tự viết hoa
   */
	function ToUpper($string){
		$arrayUpper = explode('|',preg_replace("/\n|\t|\r/","",$this->upper));
		$arrayLower = explode('|',preg_replace("/\n|\t|\r/","",$this->lower));
		return str_replace($arrayLower,$arrayUpper,$string);
	} 
   /**
    *	Gỡ bỏ dấu tiếng việt
    *	parameters:
	*		@string: chuỗi ký tự tiếng việt
	*	results: chuỗi đã bỏ dấu tiếng việt
   */	
	function RemoveSign($string){
        foreach($this->vnarray as $en=>$uni){  
            $string = preg_replace("/($uni)/i", $en, $string);  
        }  
        return $string; 
    }
    
   /**
    *	xóa các khoảng trắng thừa
    *	parameters:
	*		@string: chuỗi ký tự
	* 	results: chuỗi sau khi xóa các khoảng trắng thừa
   */ 	
	function RemoveMultiSpace($string){
		return preg_replace("/\s+/", ' ', trim($string));
    }   
//Tìm kiếm chuỗi con
   /**	
	*	Tìm kiếm chuỗi con có xuất hiện trong chuỗi lớn ko
	*	parameters:
	*		@needle: chuỗi con cần tìm
	*		@string: chuỗi lớn
	*	results: true nếu chuỗi con có trong chuỗi lớn và false nếu ko có
   */	
   function Contains($needle, $string, $caseSensitive = false){
		 if (!$needle){
         return true;
      }
      if(!$caseSensitive){
         return stripos($string, $needle) !== false;
      }
      else return preg_match("/.*$needle.*/",$string);
      
   }
   /**	
	*	Tìm kiếm chuỗi con ở cuối chuỗi lớn ko
	*	parameters:
	*		@needle: chuỗi con cần tìm
	*		@string: chuỗi lớn
	*	results: true nếu chuỗi con có ở cuối chuỗi lớn và false nếu ko có
   */	
   function EndWith($end, $string, $caseSensitive = false){
      if($caseSensitive){
         return preg_match("/$end$/", $string);   
      }
      else{
         $end = $this->ToLower($end);
         $string = $this->ToLower($string);
         return preg_match("/$end$/", $string);
      }
   }
   /**	
	*	Tìm kiếm chuỗi con ở đầu chuỗi lớn ko
	*	parameters:
	*		@needle: chuỗi con cần tìm
	*		@string: chuỗi lớn
	*	results: true nếu chuỗi con có ở đầu chuỗi lớn và false nếu ko có
   */	
   function BeginWith($begin, $string, $caseSensitive = false){
		if($caseSensitive){
			return preg_match("/^$begin/", $string);   
      }
	  else 
			$begin = $this->ToLower($begin);
			$string = $this->ToLower($string);
			return preg_match("/^$begin/", $string);
   }    
	
    /**
	*	tìm kiếm 1 chuỗi con trong chuỗi lớn
	*	parameters:
	*		@needle: chuỗi con cần tìm
	*		@string: chuỗi lớn
	*	results: vị trí đầu tiên tìm thấy hoặc -1 nếu không tìm thấy
   */ 	
    function IndexOf($needle, $string, $caseSensitive = false){
		$d = stripos($string, $needle) ;
		if($d){
			return $d;
		}
		else{
			return -1;
		}
        
    }
	
   /**	
	*	thay thế chuỗi gốc bằng chuỗi mới
	*	parameters:
	*		@remove: chuỗi gốc  
	*		@string: chuỗi mới
	* 	results: chuỗi sau khi đã thay thế
   */		
	function Replace($remove, $string){
       $results = str_replace($remove, $string, $results);
	   return $results;
   }
   /**	
	*	loại bỏ khoảng trắng hoặc ký tự thừa ở đầu và cuối xâu ký tự
	*	parameters:
	*		@string: chuỗi lớn  
	*		@trim: chuỗi cần loại bỏ
	* 	results: chuỗi sau khi đã loại bỏ 
   */	
	function Trim($string, $trim){
      return trim($string, $trim);
   }
   
   /** 
	*	tạo bản tóm tắt theo số từ
	*	parameters: 
	*		@text: 1 đoạn văn bản
	* 	results: chuỗi 50 từ đầu tiên của đoạn văn bản
   */
	function CropWord($text, $words = 50){
		$matches = preg_split("/\s+/", $text, $words + 1);
		$sz = count($matches);
		if ($sz > $words){
			unset($matches[$sz-1]);
			return implode(' ',$matches)."...";
		}
		return $text;
	}
    
   /** 
	*	tạo bản tóm tắt theo số ký tự
	*	parameters: 
	*		@text: 1 đoạn văn bản
	* 	results: chuỗi 100 ký tự đầu tiên của đoạn văn bản
   */
	function Crop($text, $length = 100, $reserveLastWord = false){
		 if (strlen($text)>$length){
          if ($reserveLastWord){
              $text = substr($text, 0, $length);
              $text = substr($text, 0, strrpos($text, ' ')).'...';
          }
          else{
              $text = substr($text, 0, $length).'...';
          }
      }

      return $text;
	} 
      
   /**
	*	cắt ra 1 chuỗi con từ chuỗi ban đầu
	*	parameters:
	*		@string: chuỗi lớn ban đầu
	*		@start: vị trí bắt đầu chuỗi con trong chuỗi lớn
	*		@lenth: chiều dài chuỗi con
	*	results: chuỗi con đã đc cắt ra
   */		
	function SubString($string, $start, $lenth = null){
		return substr($string,$start,$length);
	}
   
   /**
	*	đảo ngược 1 chuỗi
	*	parameters:
	*		@string: chuỗi ký tự
	*	results: chuỗi đảo ngược
   */ 	
    function ReverseString($string){
		return strrev($string);
    }
}

?>